package de.preiscrawler.parser;

import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import net.htmlparser.jericho.Element;
import net.htmlparser.jericho.Source;
import net.htmlparser.jericho.TextExtractor;

import de.preiscrawler.AlleAnbieter;
import de.preisrobot.entity.Artikel;

public class RedCoonSearchParser implements Parser{

	@Override
	public List<Artikel> parse(String sourceUrlString) throws Exception {
		
		Source source = new Source(new URL(sourceUrlString));
		return parse(source);
	}

	private List<Artikel> parse(Source source) {
	 
		List<Artikel>  res = new ArrayList<Artikel>();
		List<Element> allElementsByClass = source.getAllElementsByClass("product");
		for (Element element : allElementsByClass) {
			
			String imageUrl = getImageUrl(element);
 			String artikelNr = getArtikelNr(element);
			String desc = getArtikelDescription(element);
			String preis = getArtikelPreis(element);
			String artikelLink = getArtikelLink(element);
			String herstellerName = getHersteller(element);
			Artikel a = new Artikel();
			a.setAnbieterId(getAnbieter());
			a.setArtikelLink(artikelLink);
			a.setHersteller(herstellerName);
			a.setArtikelNr(artikelNr);
			a.setPreis(preis);
			a.setImageLink(imageUrl);
			a.setDesc(desc);
			res.add(a);
		}
		
		
		return res;
	}

	private String getArtikelDescription(Element element) {
		String desc ="";
		List<Element> descElement = element.getAllElementsByClass("pd-bullets");
		Element element2 = descElement.get(0);
		List<Element> allElements = element2.getAllElements();
		for (Element element3 : allElements) {
			String line = element3.getTextExtractor().toString();
			desc = desc + line +"\n";
		}
		return desc;
	}

	private String getArtikelNr(Element element) {
		List<Element> prodNr = element.getAllElementsByClass("productId sllg");
		Element element2 = prodNr.get(0);
		TextExtractor textExtractor = element2.getTextExtractor();
		String string = textExtractor.toString();
		String[] split = string.split(":");
		return split[1];
	}

	private String getArtikelPreis(Element element) {
		String preis=null;
		List<Element> priceElems = element.getAllElementsByClass("lb-price");
		Element element2 = priceElems.get(0);
		List<Element> allElements = element2 .getAllElements("img");
		
		for (Element imgPreislInk : allElements) {
			imgPreislInk.toString();
		}
		return preis;
 
	}

	private String getArtikelLink(Element element) {
		List<Element> artikelTitle = element.getAllElementsByClass("rcr tdu productDetailLink");
		Element element2 = artikelTitle.get(0);
		String artikelLink = element2.getAttributeValue("href");
		return artikelLink;
	}

	private String getHersteller(Element element) {
		List<Element> hersteller = element.getAllElementsByClass("tac box5 branding");
		Element herst = hersteller.get(0);
		List<Element> allElements = herst.getAllElements("a");
		Element h = allElements.get(0);
		String title = 	h.getAttributeValue("title");
		return title;
	}

	private String getImageUrl(Element element) {
		List<Element> imgElem = element.getAllElementsByClass("productPic");
		Element element3 = imgElem.get(0);
		String imgUrl = element3.getAttributeValue("src");
		return imgUrl;
	}

	@Override
	public int getAnbieter() {
		 
		return AlleAnbieter.REDCOON;
	}

}
